﻿using FluidKit.Controls;
using FluidKit.Samples;
using System;
using KinectControl;
using System.Windows;
using System.Linq;
using System.Runtime.InteropServices;
using System.Windows.Interop;
using System.Windows.Media;
using FolderPickerLib;
using System.Configuration;
using System.Drawing;
using System.Windows.Forms;
using System.IO;


namespace VitrineInterativa
{
    /// <summary>
    /// 	Interaction logic for Window1.xaml
    /// </summary>
    public partial class PrincipalGlass
    {
        bool configuracaoCarregada = false;
        private Timer AtualizaConfigs;

        public PrincipalGlass()
        {
            InitializeComponent();

            ConfiguraLabels();

            WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen;

            if (!string.IsNullOrEmpty(VitrineInterativa.Properties.Settings.Default.PastaRaiz))
                tbCaminho.Text = VitrineInterativa.Properties.Settings.Default.PastaRaiz;

            ConfiguraTimer();
        }

        private void ConfiguraTimer()
        {
            this.AtualizaConfigs = new Timer();
            this.AtualizaConfigs.Interval = 5000;
            this.AtualizaConfigs.Tick += (sender, e) =>
            {
                this.CarregaEstatistica();
            };
            this.AtualizaConfigs.Start();
        }

        private void ConfiguraLabels()
        {
            if (Config.ModoApresentacao.ToUpper().Equals("VITRINE"))
            {
                txbNomeSistema.Text = "Vitrine Interativa";
                txbPessoasDetectadas.Text = " pessoas passaram em frente a loja.";
                txbPessoasIntegariram.Text = " pessoas interagiram com a vitrine.";
            }
            else
            {
                txbNomeSistema.Text = "Apresentação Interativa";
                txbPessoasDetectadas.Text = " pessoas detectadas.";
                txbPessoasIntegariram.Text = " pessoas interagiram.";                
            }
        }


        private bool ValidaSerial()
        {
            bool result = false;
            try
            {
                string serial = Config.Serial;

                if (!string.IsNullOrEmpty(serial))
                {
                    string key = Uteis.PublicKey1 + Uteis.getProcessorID();
                    string chave = Uteis.CalculateMD5Hash(key);

                    if (serial.Equals(chave))
                        result = true;
                    else
                        throw new Exception("Chave de autenticação inválida.");
                }
                else
                    throw new Exception("É necessário incluir uma chave de autenticação.");


            }
            catch (Exception ex)
            {
                result = false;
                System.Windows.MessageBox.Show(ex.Message, "Aviso", MessageBoxButton.OK, MessageBoxImage.Warning);
            }

            return result;
        }

        private void btnApresentacao_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                if (!string.IsNullOrEmpty(tbCaminho.Text) && Directory.Exists(tbCaminho.Text))
                {
                    VitrineInterativa.Properties.Settings.Default.PastaRaiz = tbCaminho.Text;
                    VitrineInterativa.Properties.Settings.Default.Save();
                }
                if (ValidaSerial())
                {
                    if (Directory.Exists(tbCaminho.Text))
                    {
                        ElementDisplay display = new ElementDisplay();

                        Screen s1 = Screen.AllScreens[0];
                        Rectangle r1 = s1.WorkingArea;
                        this.Top = r1.Top;
                        this.Left = r1.Left;

                        if (Config.TelaExtendida.Equals("S"))
                        {
                            if (Screen.AllScreens.Length > 1)
                            {
                                Screen s2 = Screen.AllScreens[1];
                                Rectangle r2 = s2.WorkingArea;
                                display.WindowStartupLocation = System.Windows.WindowStartupLocation.Manual;
                                display.Topmost = true;
                                display.Top = r2.Top;
                                display.Left = r2.Left;
                                display.Height = r2.Height;
                                display.Width = r2.Width;
                            }
                            display.ShowActivated = true;
                            display.Show();
                        }
                        else
                        {
                            display.Show();
                        }
                    }
                    else
                        System.Windows.MessageBox.Show("Coletânea não localizada.", "Erro", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                }
            }
            catch (Exception ex)
            {
                Log.GravarLog("Erro", ex);
                System.Windows.MessageBox.Show(ex.Message, "Erro", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }



        private void btnConfiguracao_Click(object sender, RoutedEventArgs e)
        {
            if (!configuracaoCarregada)
            {
                CarregaConfig();
                this.Height = 480;
                GridConfig.Visibility = Visibility.Visible;
                configuracaoCarregada = true;
            }
            else
            {
                this.Height = 290;
                GridConfig.Visibility = Visibility.Hidden;
                configuracaoCarregada = false;
            }
        }

        private void btnSair_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        private void btnReiniciar_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                MessageBoxResult resp = System.Windows.MessageBox.Show("Tem certeza que deseja limpas as estatísticas de uso?", "Pergunta", MessageBoxButton.OKCancel);
                if (resp.Equals(MessageBoxResult.OK))
                {
                    //Grava o log antes de zerar estatisticas
                    Log.GravarLog(string.Format("Nº Captações: {0}; Nº Interações: {1}", Config.NumCaptacao, Config.NumInteracao));

                    Config.NumCaptacao = 0;
                    Config.NumInteracao = 0;
                    tbNumPessoaCapt.Text = "0";
                    tbNumPessoaInter.Text = "0";
                }
            }
            catch (Exception ex)
            {
                if (ex != null && ex.Message != null && ex.StackTrace != null)
                    System.Windows.MessageBox.Show(string.Format("Mensagem:\n {0} \n\n StackTracke:\n {1}", ex.Message, ex.StackTrace));
            }
        }

        //Seleciona a pasta que vai conter todos os albuns
        private void btnCaminhoColetania_Click(object sender, RoutedEventArgs e)
        {
            var dg = new FolderPickerDialog();
            string caminhoAlbum = string.Empty;

            if (dg.ShowDialog() == true)
                tbCaminho.Text = dg.SelectedPath;
        }


        private void CarregaConfig()
        {
            try
            {
                tbCaminho.Text = Config.PastaRaiz;
                CarregaEstatistica();
            }
            catch (Exception ex)
            {
                Log.GravarLog("Erro", ex);
                System.Windows.MessageBox.Show("Houve um erro: " + ex.Message);
            }
        }

        private void CarregaEstatistica()
        {
            tbNumPessoaCapt.Text = Config.NumCaptacao.ToString();
            tbNumPessoaInter.Text = Config.NumInteracao.ToString();
        }
    }
}